package com.xinchao.dao;

import com.xinchao.model.dto.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 广告监播Mapper
 *
 * @author dxy
 * @date 2018/9/20 15:58
 */
public interface AdvertisementMonitorMapper {
	/**
	 * 通过时间获取广告监播总数
	 *
	 * @param advertisementName 广告名称
	 * @param startTime         开始时间
	 * @param endTime           结束时间
	 * @param deviceNumber      机器码
	 * @return IndexAdvertisementMonitorSumVO
	 */
	AdvertisementMonitorSumDTO getAdvertisementMonitorSumByTime(@Param("advertisementName") String advertisementName, @Param("startTime") Long startTime,
	                                                            @Param("endTime") Long endTime, @Param("deviceNumber") String deviceNumber);

	/**
	 * 获取广告监播表中的所有天数列表
	 *
	 * @return List<String>
	 */
	List<String> listAllDays();

	/**
	 * 通过广告编码获取广告曝光次数的总和
	 *
	 * @param advertisementCode 广告编码
	 * @return Long（广告曝光次数的总和）
	 */
	Long sumWatchNumberByAdvertisementCode(String advertisementCode);

	/**
	 * 通过广告名称统计曝光次数
	 *
	 * @param advertisementName 广告名称
	 * @return Double
	 */
	Long sumExposures(@Param("advertisementName") String advertisementName, @Param("startTime") Long startTime, @Param("endTime") Long endTime);

	/**
	 * 通过广告名称统计总时长
	 *
	 * @param advertisementName 广告名称
	 * @return Double
	 */
	PlayDurationWatchSumDTO getPlayDurationWatchDTO(@Param("advertisementName") String advertisementName, @Param("startTime") Long startTime, @Param("endTime") Long endTime);

	/**
	 * 通过广告名称获取曝光次数、触达人次
	 *
	 * @param advertisementName 广告名称
	 * @return TouchWatchSumDTO
	 */
	TouchWatchSumDTO getTouchWatchSumDTO(@Param("advertisementName") String advertisementName, @Param("startTime") Long startTime, @Param("endTime") Long endTime);

	/**
	 * 获取广告的终端曝光次数列表
	 *
	 * @param advertisementName 广告名称
	 * @param startTime         结束时间
	 * @param endTime           开始时间
	 * @param size              条数
	 * @return List<DeviceExposuresSumDTO>
	 */
	List<DeviceExposuresSumDTO> listDeviceExposuresSumDTO(@Param("advertisementName") String advertisementName, @Param("startTime") Long startTime, @Param("endTime") Long endTime, @Param("size") int size);

	/**
	 * 获取广告的终端观看人次列表
	 *
	 * @param advertisementName 广告名称
	 * @param startTime         结束时间
	 * @param endTime           开始时间
	 * @param size              条数
	 * @return List<DeviceExposuresSumDTO>
	 */
	List<DeviceWatchSumDTO> listDeviceWatchSumDTO(@Param("advertisementName") String advertisementName, @Param("startTime") Long startTime, @Param("endTime") Long endTime, @Param("size") int size);

	/**
	 * 获取广告的终端总时长、观看人次列表
	 *
	 * @param advertisementName 广告名称
	 * @param startTime         结束时间
	 * @param endTime           开始时间
	 * @return List<DeviceExposuresSumDTO>
	 */
	List<DevicePlayDurationWatchSumDTO> listDevicePlayDurationWatchSumDTO(@Param("advertisementName") String advertisementName, @Param("startTime") Long startTime, @Param("endTime") Long endTime);

	/**
	 * 通过广告名称统计观看人次
	 *
	 * @param advertisementName 广告名称
	 * @param startTime         开始时间
	 * @param endTime           结束时间
	 * @return Double
	 */
	Long sumWatch(@Param("advertisementName") String advertisementName, @Param("startTime") Long startTime, @Param("endTime") Long endTime);


	/**
	 * 通过广告名称获取终端列表
	 *
	 * @param advertisementName 广告名称
	 * @return Integer
	 */
	List<String> listDeviceSumByAdvertisementName(String advertisementName);

	/**
	 * 统计观看人次
	 * @param advertisementCodeList 广告编码列表
	 * @return Long
	 */
	Long sumWatchNumber(@Param("advertisementCodeList") List<String> advertisementCodeList);
}
